package com.agile.leetcode.genericity;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**
 * @Author ChenZhangKun
 * @Date 2020/9/30 14:35
 */
public class Generic {
    public static void main(String[] args) {
        List<List<Integer>> list=new ArrayList<>();
        List<Integer> list1=new ArrayList<>();
        list1.add(1);
        list1.add(2);
        list.add(list1);
        fun(list);
        fun_1(list);
    }

    /**
     * T 泛型的方式
     * @param list
     * @param <T>
     */
    public static <T extends Collection> void fun(List<T> list){
        for (T t : list) {
            // 可以获取具体传入子类的得方法
            System.out.println(t.size());
        }
    }

    /**
     * 可以多继承
     * 而占位符不行
     * @param <T>
     */
    public static <T extends Person & Human> void fun_2(){

    }

    /**
     * ？占位符的方式
     * @param list
     */
    public static void fun_1(List<? extends Collection> list){
        for (Collection collection : list) {
            // 只能使用顶层接口的方法
            // 需要使用具体实体类方法需要进行强转
            System.out.println(System.out);
            System.out.println(collection.size());
        }
    }
}
class Person{
    private Integer age;
    public Integer getAge(){
        return age;
    }
}
interface Human{
     String name=null;
     String getName();
}
